Auth0のCI/CD環境をGitHub Actionsで構築してみた
Auth0は様々なアプリやAPIに対応可能な統合認証基盤サービスです。Auth0公式が提供しているAuth0 Deploy CLIを使用することで、テナントの設定をソースコードで管理できます。また、既存のCI/CDパイプラインと統合して、Auth0テナントのCI/CD環境を構築することも可能です。
今回はAuth0のCI/CD環境をGitHub Actionsで構築してみます。
Auth0 Deploy CLIをインストール
npmで個人のPC環境にAuth0 Deploy CLIをインストールします。
npm i -g auth0-deploy-cli
テナント設定をエクスポート
プロジェクトのディレクトリにAuth0 Deploy CLIの設定ファイルを作成します。認証情報は次の記事を参考にアプリを作成後、アプリの設定ページから取得してください。
{ "AUTH0_DOMAIN": "auth0-deploy-cli-extension domain", "AUTH0_CLIENT_SECRET": "auth0-deploy-cli-extension client ID", "AUTH0_CLIENT_ID": "auth0-deploy-cli-extension client secret", "AUTH0_ALLOW_DELETE": true }
認証情報はセキュリティの都合上、リポジトリで管理したくないので.gitignore
にconfig.json
を追加します。
次のコマンドでAuth0のテナント設定をエクスポートします。
a0deploy export -c config.json -f yaml -o
デプロイ用のスクリプトを実装
npmでプロジェクトにパッケージをインストールします。
npm init npm i --save-dev auth0-deploy-cli
デプロイ用のスクリプトを実装します。
const deploy = require("auth0-deploy-cli").deploy; const config = { AUTH0_DOMAIN: process.env.AUTH0_DOMAIN, AUTH0_CLIENT_SECRET: process.env.AUTH0_CLIENT_SECRET, AUTH0_CLIENT_ID: process.env.AUTH0_CLIENT_ID, AUTH0_ALLOW_DELETE: true, AUTH0_API_MAX_RETRIES: 10, }; deploy({ input_file: "tenant.yaml", config: config, env: process.env, }) .then(() => console.log("yey deploy was successful")) .catch((err) => console.log(`Oh no, something went wrong. Error: ${err}`));
package.json
にデプロイ用のスクリプトを追加します。
"scripts": { "deploy": "node scripts/deploy.js" },
次のコマンドでデプロイできるようになりました。
# 環境変数をセット export AUTH0_DOMAIN='ドメイン' export AUTH0_CLIENT_SECRET='シークレットキー' export AUTH0_CLIENT_ID='クライアントID' # デプロイ npm run deploy
GitHub ActionsでCI/CDを構築
ここからはGitHub ActionsでCI/CDを構築します。
シークレット変数を設定
Auth0の認証情報をプロジェクトのシークレット変数に登録します。
ワークフローを作成
GitHubプロジェクトのActionsから新規ワークフローを作成します。
Auth0のデプロイは次のようなワークフローになります。
name: Auth0 on: push: branches: [master] pull_request: branches: [master] jobs: deploy: runs-on: ubuntu-latest env: AUTH0_DOMAIN: ${{secrets.AUTH0_DOMAIN}} AUTH0_CLIENT_SECRET: ${{secrets.AUTH0_CLIENT_SECRET}} AUTH0_CLIENT_ID: ${{secrets.AUTH0_CLIENT_ID}} steps: - uses: actions/checkout@v2 - name: Use Node.js uses: actions/setup-node@v1 with: node-version: "12.x" - run: npm ci - run: npm run deploy
テストを追加する場合はjobs.deploy
の前にテストのジョブを追加します。
動作確認
試しにテナント設定を変更してmasterブランチにプッシュしてみます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~ tenant: enabled_locales: - ja ~~~~~~~~~~~~~~~~~~~~~~~~~~~
GitHub Actionsのワークフローが実行されます。
Auth0のテナント設定が反映されました。
テナント設定で環境変数を利用
テナントの設定ファイル「tenant.yaml」で環境変数を使う場合は、##KEY##
のように記載します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~ clients: - name: My App allowed_clients: [] allowed_logout_urls: - "##ALLOWED_ORIGIN_URL##" app_type: spa callbacks: - "##ALLOWED_ORIGIN_URL##" client_aliases: [] cross_origin_auth: false custom_login_page_on: true grant_types: - authorization_code - implicit - refresh_token is_first_party: true is_token_endpoint_ip_header_trusted: false jwt_configuration: alg: RS256 lifetime_in_seconds: 36000 secret_encoded: false native_social_login: apple: enabled: false facebook: enabled: false oidc_conformant: true refresh_token: rotation_type: non-rotating expiration_type: non-expiring sso_disabled: false token_endpoint_auth_method: none web_origins: - "##ALLOWED_ORIGIN_URL##" ~~~~~~~~~~~~~~~~~~~~~~~~~~~
まとめ
実際に認証基盤を運用する場合、開発環境や検証環境も用意することが多いと思います。今回はGitHub ActionsでCI/CD環境を構築してデプロイを自動化することで、効率よく本番環境へリリースできるようになりました。WEBの管理画面から手動で各環境を管理すると煩雑になるので、YAMLでテナントの設定を管理できるのはとても便利です。